A current processor, such as a central processing unit (CPU, Central Processor Unit), performs an operation mainly in a pipeline manner, and this is a key technology for accelerating the CPU. Both a synchronous processor and an asynchronous processor usually use this pipeline technology. In the synchronous processor, each operation in the pipeline is controlled by a same clock, and this architecture causes relatively high CPU consumption. Based on the pipeline, in the asynchronous processor, a pulse used in each operation (that is, a clock of the operation) is not synchronous, and whether the pulse needs to be given in the operation is determined according to a current instruction, so as to reduce consumption.
Currently, a mainstream asynchronous processor circuit is relatively complex, and includes control logic and a data path. The control logic includes a handshake protocol and a control component. In a latest asynchronous processor circuit design, a token (token) method is used to replace the handshake protocol, and this may reduce design complexity. The idea of tokens is similar to relay transfer. When receiving a token signal, a function module starts execution, and passes the token to a next function module when execution ends. When execution of the next function module is not required, the token is directly transparently transmitted to a subsequent module. In this asynchronous processor, a token is a clock signal, and each module samples a data signal by using a token signal.
In a typical asynchronous processor that uses a token, a clock signal passes through a delay logic unit, and is input into each function unit to sample a corresponding data signal. The function unit includes a sampling unit (clocked device) and processing logic (Processing Logic). The delay logic unit is an important part of the asynchronous processor, and is also an important component for distinguishing the asynchronous processor from the synchronous processor. The delay logic unit controls a token use time and token transfer. After receiving a token, a unit completes execution, and passes the token along, and this period of time is the token use time. The token transfer includes transfer between execution units and transfer between function units. If an asynchronous processor includes M execution units (XU, Execution Unit), and each XU includes N function units, M tokens are transferred between XUs (referred to as vertical token transfer in the following), and N tokens are transferred between function units in each XU (referred to as horizontal token transfer in the following). Therefore, a total quantity of tokens is N×M. When a token is out of use, the token may be transferred to a next function unit and a next XU at the same time.
Therefore, for the asynchronous processor that uses a token, a main architecture of the asynchronous processor includes an XU and token logic, and token transfer controls an execution procedure of the XU.
In the current token-based asynchronous processor architecture, each XU represents an arithmetic logic unit (ALU, Arithmetic Logic Unit). The architecture may further include a register (REG, Register), a multiply accumulate (MAC, Multiply Accumulate) unit, and an external execution unit (EXU, External Execution Unit). The MAC unit performs an operation such as multiplication, and the EXU performs an operation such as division or a floating-point operation. In the processor architecture, the token logic controls an execution sequence of units, n XUs need n ALUs, and each ALU has m function units, so that n×m tokens need to be transferred. For these tokens, a clock pulse (clock pulse) signal is generated according to information obtained after instruction decoding, to invoke each function unit.
This token-based asynchronous processor architecture is not flexible enough, and a quantity of ALUs and a quantity of vertical tokens need to remain consistent. With an increasing bit width of data that needs to be processed by a future processor, a quantity of XUs also needs to be increased, and a bus width is large. This is unfavorable to a backend layout.